home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / GRANULE.D < prev    next >
Encoding:
Modula Definition  |  1994-02-01  |  3.7 KB  |  94 lines

  1. DEFINITION MODULE Granule;
  2.  
  3. (*
  4.  * Dieses Modul ist eine alternative Speicherverwaltung zu Storage.
  5.  * Der Vorteil ist, daß sie für Blöcke in 16-Byte-Portionen optimiert
  6.  * ist und fast keinen Verwaltungs-Overhead hat.
  7.  *
  8.  * Sie ist u.U. auch schneller als Storage. Allerdings erkennt sie
  9.  * nicht, welche Blöcke zusammengehören - das Anwendungsprogramm muß
  10.  * selbst genau darauf achten, wieviel es alloziert hatte, wenn es einen
  11.  * Bereich wieder freigeben will. DEALLOCATE (x, 0) ist also hier nicht
  12.  * erlaubt - es muß immer exakt die Größe des belegten Bereichs angegeben
  13.  * werden.
  14.  *
  15.  * Granule wurde speziell für den GME entwickelt. Der GME verwaltet jede
  16.  * einzelne Zeile über dieses Modul in einem eigens allozierten Block.
  17.  *
  18.  * Ob Granule oder Storage für Ihre Anwendung besser geeignet ist,
  19.  * probieren Sie am Besten in der Praxis aus.
  20.  * Um die Funktionen 'CreateHeap', 'SetDefaultSize' usw. brauchen Sie sich
  21.  * dabei nicht unbedingt zu kümmern - sie dienen nur Optimierungszwecken.
  22.  *
  23.  * Hinweis:
  24.  * Die aktuelle Implementation dieses Moduls benutzt bei TT- und Falcon-
  25.  * Rechnern nur das langsamere ST-RAM, also kein TT-RAM.
  26.  * Wen das stört, setze sich mit Th. Tempelmann in Verbindung oder siehe
  27.  * die Notizen vom Source des Moduls (die Quelltexte aller Module sind
  28.  * ebenfalls dort zu bekommen). Der Nachteil wäre dann allerdings, daß ca.
  29.  * 100 KB zusätzlich ungenutzt belegt werden müßten, falls TT-RAM verfügbar
  30.  * ist.
  31.  *)
  32.  
  33. FROM SYSTEM IMPORT  ADDRESS;
  34.  
  35.  
  36. PROCEDURE ALLOCATE (VAR adr: ADDRESS; bytes: LONGCARD);
  37. (* Belegt Speicher ab adr mit bytes Bytes. Wenn Dynamic = TRUE
  38.  * (siehe Prozedur Dynamic) wird bei einem Heapüberlauf ein weiteres
  39.  * Speichersegment angefordert und in den Heap integriert. Wenn FALSE
  40.  * oder kein Speicher mehr zu Verfügung steht, wird adr NIL gesetzt.
  41.  *)
  42.  
  43. PROCEDURE DEALLOCATE (VAR addr: ADDRESS; bytes: LONGCARD);
  44. (* Gibt den Speicher wieder frei. 'bytes' muß den selben Wert haben,
  45.  * mit dem der Speicher für 'addr' vorher belegt wurde.
  46.  * (werden NEW und DISPOSE verwendet, wird dafür automatisch Sorge getragen).
  47.  *)
  48.  
  49. PROCEDURE Shrink (VAR adr: ADDRESS; amount: LONGCARD; VAR size: LONGCARD);
  50. (* Gibt mit allocate belegten Speicher frei.
  51.  * 'amount' ist die Anzahl, um die der Block verkleinert werden soll,
  52.  * 'size' muß beim Aufruf mit der alten Größe besetzt sein und enthält
  53.  * hinterher die neue Größe.
  54.  * Der freizugebende Teil wird am Ende des Blocks abgezwackt und für
  55.  * neue ALLOCATEs zur Verfügung gestellt.
  56.  *)
  57.  
  58. PROCEDURE CreateHeap (bytes: LONGCARD): INTEGER;
  59. (* Installiert den Heap mit bytes Byte. Liefert einen Fehlercode mit
  60.  * folgender Bedeutung:
  61.  *
  62.  *  0   = Kein Fehler, Heap wurde installiert
  63.  * -1   = Kein Speicher in ausreichender Größe zur Verfügung
  64.  * -2   = Heap ist bereits installiert
  65.  *
  66.  * Wird kein Heap installiert, wird beim ersten ALLOCATE-Aufruf
  67.  * automatisch ein Heap v. 64KB erzeugt.
  68.  *)
  69.  
  70. PROCEDURE Dynamic (dyn: BOOLEAN);
  71. (* Schaltet die Dynamic-Option des Heaps.
  72.  * TRUE  = ALLOCATE fordert bei Heapüberlauf neues Speichersegment an.
  73.  * FALSE = ALLOCATE liefert bei Heapüberlauf immer NIL
  74.  *)
  75.  
  76. PROCEDURE SetDefaultSize (size: LONGCARD);
  77. (* Setzt die Standard-Heapgröße, um die der Heap erweitert wird,
  78.  * wenn er bei "dynamic=TRUE" um ein neues Segment erweitert werden muß.
  79.  * Der Default ist 64 KB
  80.  *)
  81.  
  82. PROCEDURE Free (): LONGCARD;
  83. (* Liefert Anzahl der Bytes, die auf dem bereits angelegten Heap noch
  84.  * frei sind.
  85.  *)
  86.  
  87. PROCEDURE MemAvail (): LONGCARD;
  88. (* liefert die Anzahl aller freien Bytes sowohl im Heap, als auch im
  89.  * noch nicht allozierten Speicher - abzüglich der GEMDOS-Reserve
  90.  * (Konstante GEMReserve, z.Zt. 64KB)
  91.  *)
  92.  
  93. END Granule.
  94.